package pruebas.testArmas;

import org.junit.*;

import static org.junit.Assert.*;
import static modelo.SetUps.DANIO_TORPEDO_SIMPLE;
import static modelo.SetUps.ALCANCE_TORPEDO_SIMPLE;
import static modelo.SetUps.CARGA_TORPEDO_SIMPLE;
import modelo.armas.Balas;
import modelo.armas.BuscaEnemigos;
import modelo.armas.FaltaDeCargaException;
import modelo.armas.RadarAlgo42;
import modelo.armas.TorpedoRastreador;
import modelo.naves.Avioneta;
import modelo.util.Vector;


public class TestTorpedoRastreador {
	private Vector p1 = new Vector (0,0);
	private Vector p2 = new Vector (1,0);
	private TorpedoRastreador arma;
	private Avioneta nave;
	
	@Before
	public void setUp() throws Exception{
		arma = new TorpedoRastreador (new BuscaEnemigos());//torpedo del algo42
		nave = new Avioneta (p1,p2);
	}


	@Test (expected = FaltaDeCargaException.class)
	public void testCarga (){
		//debe permitir disparar "carga veces"
		for (int i = 0; i < CARGA_TORPEDO_SIMPLE; i++){
			assertTrue ("deberia permitir seguir disparando",
					arma.puedeSeguirDisparando());
			arma.disparar(p1,p2);
		}
		//con la carga agotada levanta una excepcion
		arma.disparar(p1,p2);
	}
	
	
	@Test
	public void testDisparar(){
		RadarAlgo42 radar = (RadarAlgo42)arma.disparar(p1, p2);
		//el radar deberia chocarse con la nave
		assertTrue ("el radar y la nave deberian poder chocarse",
				radar.chocaCon(nave));
		radar.chocarCon(nave);
		assertFalse ("el radar no deberia seguir actuando",
				radar.seguirActuando());
		Balas unaBala = (Balas)radar.dejarNuevoObjetoAlMorir();
		assertEquals("el radar no crea la bala en la posicion correcta",
				p1, unaBala.getPosicion());
		assertEquals ("danio no se ha inicializado correctamente",
				DANIO_TORPEDO_SIMPLE, unaBala.getDanio());
		assertEquals ("alcance no se ha inicializado correctamente",
				ALCANCE_TORPEDO_SIMPLE, unaBala.getAlcance());
	}
}
